ホームに戻る
目次 :
フォームアプリケーションにおけるイベントセンダ
イベントを発行するコントロールを指す。
例えば、ボタンがクリックされた場合はクリックされたボタンが、
チェックボックスのチェック状態が変更された場合は当該チェックボックスがイベントセンダとなる。
イベントセンダの情報を取得
C# (.NET)
イベントハンドラの第1引数(sender)として渡される。
sender は object 型にラップされているため、メンバにアクセスするには実際の型にキャストする必要がある。
// - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -
// (イベントハンドラ)
// ラジオボタンチェック状態変更時の処理
// ⇒ イベントセンダはラジオボタン
// - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -
// ↓ イベントセンダ
private void radioButton_CheckedChanged(object sender, EventArgs e)
{
// センダがチェックされた場合に限り
// Hoge() をコール
if ( ((RadioButton)sender).Checked ) //< ((RadioButton)sender) で sender を実際の型に変換
{
Hoge();
}
}
何ができるのか
イベントセンダの情報を取得することで発行元を特定できるため、
複数のコントロールでイベントハンドラメソッドを共用することができる。
⇒ 共通のロジックをDRY化できる。
// - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -
// (イベントハンドラ)
// テキストボックス テキスト変更時の処理
// ⇒ イベントセンダはテキストボックス
// - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = -
private void textBox_TextChanged(object sender, EventArgs e)
{
// 複数のテキストボックスでこのメソッドを共用していても、
// sender を参照することで発行元を特定できる
if ( ((TextBox)sender).Text == "Hoge" )
{
Hoge();
}
}
また、前節の例にあるように、RadioButton.CheckChanged は
直接操作されたラジオボタンは勿論、同一グループにある他のラジオボタンもイベントを発行する。
ラジオボタンのチェック状態に応じて処理を行うことで、処理の重複を避けることができる。